<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 创建一个类
        class Person{
            // 声明一个构造器，接受name和age两个属性
            constructor(name,age){
                this.name = name
                this.age = age
            }
            // 设置speak方法
            speak(){
                // 类中方法的this指向的是类的实例化的对象
                console.log(`我叫${this.name},几年${this.age}岁了`);
            }
        }
        // 创建类的实例化对象p1
        const p1 = new Person("张三",19)
        // 调用类中的speak方法
        p1.speak() //=> 我叫张三,几年19岁了

        // 创建一个学生类继承上面的Person类
        class Student extends Person{
            // 给Studnet类添加一个构造器方法
            constructor(name,age,grade){
                // 如果继承的类写了constructor方法，则在constructor方法内部第一行添加super方法，用来调用父类的constructor方法
                super(name,age)
                // 添加Student类独有的属性
                this.grade = grade
            }
            // 重写父类的speak方法
            speak(){
                console.log(`我叫${this.name},几年${this.age}岁了,今年上${this.grade}`);
            }
        }
        const s1 = new Student('lisi','18','高一')
        s1.speak() //=> 我叫lisi,几年18岁了,今年上高一
    </script>
</body>
</html>